package kata04;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 处理football.dat，找到进球数和丢球数之差最小的一只球队
 * 第7列  进球数
 * 第9列  丢球数
 */
public class kata0402 {
    public static String getDiffMinTeamName(String filePath){
        //读取文件buffer
        try(BufferedReader br = new BufferedReader(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath), "UTF-8"))) {
            String strLine;
            List<String> diffs = new ArrayList<>();
            //一行一行的读取文本
            while ((strLine = br.readLine()) != null){
                //去除空格以及-后字符长度 > 0
                if(strLine.trim().replaceAll("-","").length() > 0){
                    //按 " " 分割字符串 得到数组
                    String[] strArray = strLine.replaceAll("-","").split(" ");
                    //去除数组中的空格 将数组转换成 List
                    List<String> innerList = Stream.of(strArray).filter(innerStr -> {
                        return innerStr.trim().length() > 0;
                    }).collect(Collectors.toList());
                    //List不为空且进球数出球数均为数字
                    if(innerList.size() > 0 && isNumeric(innerList.get(6)) && isNumeric(innerList.get(7))){
                        //将 -> team 和 (进球数-出球数) 进行拼接
                        diffs.add(innerList.get(1) + "-" + Math.abs(Integer.valueOf(innerList.get(6)) - Integer.valueOf(innerList.get(7))));
                    }
                }
            }
            if(diffs.size() > 0){
                //获取列表第一个作为中间值
                String[] resultArray = diffs.get(0).split("-");
                //中间值  第一个进出球差值
                int mid = Integer.valueOf(resultArray[1]);
                //遍历进出球差值列表
                for(int i = 1; i < diffs.size();i++){
                    String[] innerArray = diffs.get(i).split("-");
                    //当当前值 < mid -> mid = 当前值
                    if(Integer.valueOf(innerArray[1]) < mid){
                        resultArray = innerArray;
                        mid = Integer.valueOf(innerArray[1]);
                    }
                }
                //最后结果 球队team
                return resultArray[0];
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    // 判断是否数字
   public static boolean isNumeric(String str){
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        if( !isNum.matches() ){
            return false;
        }
        return true;
    }

}
